package Question9_5; import java.util.ArrayList; public class Question { public static int search(String[] strings, String str, int first, int last) { while (first <= last) { // Ensure there is something at the end while (first <= last && strings[last] == "") { --last; } if (last < first) { return -1; // this block was empty, so fail } int mid = (last + first) >> 1; while (strings[mid] == "") { ++mid; // will always find one } int r = strings[mid].compareTo(str); if (r == 0) return mid; if (r < 0) { first = mid + 1; } else { last = mid - 1; } } return -1; } public static int search(String[] strings, String str) { if (strings == null || str == null) { return -1; } if (str == "") { for (int i = 0; i < strings.length; i++) { if (strings[i] == "") { return i; } } return -1; } return search(strings, str, 0, strings.length - 1); } public static void main(String[] args) { String[] stringList = {"apple", "", "", "banana", "", "", "", "carrot", "duck", "", "", "eel", "", "flower"}; for (String s : stringList) { System.out.println("<" + s + "> " + " appears at location " + search(stringList, s)); } } }